package com.example.four;

import java.util.List;
import java.util.ArrayList;
import java.util.Random;
import com.example.four.Yao;

public class DivinationUtil {
    private static final Random random = new Random();

    /**
     * 单次抛掷三枚铜钱，生成一个爻象
     * 规则：
     * - 三个阴面 → 老阴（YIN，动爻）
     * - 三个阳面 → 老阳（YANG，动爻）
     * - 一阴二阳 → 少阴（YIN，静爻）
     * - 二阴一阳 → 少阳（YANG，静爻）
     */
    public static Yao tossCoinsOnce() {
        int coin1 = random.nextInt(2); // 0=阴面，1=阳面
        int coin2 = random.nextInt(2);
        int coin3 = random.nextInt(2);
        int yinCount = (coin1 == 0 ? 1 : 0) + (coin2 == 0 ? 1 : 0) + (coin3 == 0 ? 1 : 0);
        int yangCount = 3 - yinCount;

        if (yinCount == 3) {
            return new Yao(Yao.Type.YIN, true);  // 老阴（动爻）
        } else if (yangCount == 3) {
            return new Yao(Yao.Type.YANG, true); // 老阳（动爻）
        } else if (yinCount == 1) {
            return new Yao(Yao.Type.YIN, false); // 少阴（静爻）
        } else { // yinCount == 2
            return new Yao(Yao.Type.YANG, false); // 少阳（静爻）
        }
    }

    /**
     * 生成详细运势解读（不低于30字）
     */
    public static String interpretFortune(List<Yao> yaoList) {
        List<Integer> movingYaos = getMovingYaoPositions(yaoList);
        StringBuilder sb = new StringBuilder();
        sb.append("【运势解读】\n");

        if (movingYaos.isEmpty()) {
            // 无动爻解读（约80字）
            sb.append("本次卦象无动爻，象征当前事态处于稳定阶段，发展趋势明确。\n");
            sb.append("建议保持现有节奏，无需急于调整计划，耐心等待时机成熟。\n");
            sb.append("虽无突发变化，但仍需留意细节积累，稳步推进可获预期成果。");
        } else {
            // 有动爻解读（约100字）
            sb.append("动爻位置为：").append(movingYaos).append("，这些爻位暗示事态存在变数。\n");
            sb.append("近期可能出现意外机遇或挑战，需灵活应对，避免固执己见。\n");
            sb.append("建议在关键节点多听取他人意见，顺势而为可化险为夷；若盲目冒进，可能错失良机。\n");
            sb.append("整体来看，变化中暗藏转机，保持审慎与积极心态最为重要。");
        }
        return sb.toString();
    }

    /**
     * 获取动爻位置
     */
    private static List<Integer> getMovingYaoPositions(List<Yao> yaoList) {
        List<Integer> positions = new ArrayList<>();
        for (int i = 0; i < yaoList.size(); i++) {
            if (yaoList.get(i).isMoving()) {
                positions.add(i + 1); // 爻位从1开始计数
            }
        }
        return positions;
    }
}